#!/bin/bash

#
# Define la expresion regular para fechas validas.
#
expresionRegularFecha="([0-9]{1,2})([-/])([0-9]{1,2})\2([0-9]{4})"

#
# Funcion que valida una fecha en formato dd/mm/yyyy
#
# @param fecha - La primer fecha a validar.
#
# @return -- Retorna:
#            0 Si la fecha es valida
#            1 Si la fecha no es valida
#
function validar_fecha()
{
	#
	# Otengo la fecha a validar
	#
	fecha=$1

	#
	# Parseo la fecha a validar
	#
	if [[ $fecha =~ $expresionRegularFecha ]]
	then
		#
		# Obtengo dia de fecha a validar
		#
		local diaFecha=${BASH_REMATCH[1]}

		#
		# Obtengo mes de fecha a validar
		#
		local mesFecha=${BASH_REMATCH[3]}

		#
		# Obtengo anio de fecha a validar
		#
		local anioFecha=${BASH_REMATCH[4]}
	else
		#
		# Fecha no es valida, no cumple con el formato
		#
		return 1
	fi;

	#
	# Valido dia de fecha a validar
	#
	if [ $diaFecha -lt 1 -o $diaFecha -gt 31 ]
	then
		#
		# Dia invalido, fecha no es valida
		#
		return 1
	fi;

	#
	# Valido mes de fecha a validar
	#
	if [ $mesFecha -lt 1 -o $mesFecha -gt 12 ]
	then
		#
		# Mes invalido, fecha no es valida
		#
		return 1
	fi;

	#
	# Fecha es valida
	#
	return 0
}

#
# Verifico que recibo 1 parametro obligatorio.
# 1) FECHA
#
if [ $# -ne 1 ]
then
	. gralog.sh "VALIDAR_FECHA" "Error#3: Cantidad invalida de argumentos" "F"
	exit 3
fi;

#
# Obtengo primer parametro obligatorio
# 1) FECHA
#
fecha=$1

#
# Invoco la funcion validar fecha
#
validar_fecha $1

#
# Devuelvo el resultado de la funcion validar fecha
#
exit $?
